package strecke;

import com.jme3.math.Vector3f;

import helper.IDGenerator;

public abstract class Gleis implements GleisElement{

	protected long ID;
	
	protected GleisElement next;
	protected GleisElement prev;
	
	protected Vector3f startpos;
	protected float startwinkel;
	protected float steigung; //TODO Unused
		
	protected int hoechstgeschwindigkeit;

	public Gleis(GleisElement prev, int hoechstgeschwindigkeit)
	{
		this.ID = IDGenerator.generateID();
		System.out.println("Gleis erzeugt, ID = " +ID);
		this.prev = prev;
		this.hoechstgeschwindigkeit = hoechstgeschwindigkeit;
		float l = prev.getLaenge();
		this.startpos = prev.getPosition(l);
		this.startwinkel = prev.getWinkel(l);
	}
	
	public void setNext(GleisElement next)
	{
		this.next = next;
	}
	
	public void setPrev(GleisElement prev)
	{
		this.prev = prev;
	}
	
	@Override
	public GleisElement getNext() {
		return this.next;
	}

	@Override
	public GleisElement getPrev() {
		return this.prev;
	}

	@Override
	public int getHoechstgeschwindigkeit() {
		return this.hoechstgeschwindigkeit;
	}

	@Override
	public long getID() {
		return this.ID;
	}
	
	@Override
	public String toString() {
		String result = "Gleisinformation\n";
		result += "ID: " + ID + "\n";
		result += "Hoechstgeschwindigkeit: " + hoechstgeschwindigkeit + "\n";
		result += "Startpos: " + startpos + "\n";
		result += "Startwinkel: " + startwinkel + "\n";
		result += "Laenge: " + getLaenge() + "\n";
		result += "Verlauf: " + getPosition(0) + " - " + getPosition(getLaenge() / 4) + " - " + getPosition(getLaenge() / 2) + " - " + getPosition(getLaenge() * 3 / 4) + " - " + getPosition(getLaenge()) + "\n";
		return result;
	}
	
	public String getVerlauf(int intervalle)
	{
		String result = "Verlauf Gleis "+ ID + "\n";
		
		for(int i = 0; i<=intervalle; i++)
		{
			result += "(" + getPosition(((float)i/(float)intervalle)*getLaenge()) + "), Winkel: " + getWinkel(((float)i/(float)intervalle)*getLaenge()) + "\n";
		}
		
		return result;
	}
}
